# 由于IP需要购买，一次就结束太过浪费因此可以将上次的代码加一个retry修饰器,进行重复使用
import requests
from fake_useragent import FakeUserAgent
from lxml import etree
from retrying import retry


# 定义一个获取当前ip的函数
def get_my_ip(proxies=None):
    # 得到IP的网址
    url = 'https://ip.900cha.com/'

    # 定义请求头
    headers = {'User-Agent': FakeUserAgent().random}

    # 发起网络请求
    response = requests.get(url, headers=headers, proxies=proxies)

    # 通过Xpath来筛选出IP信息并输出
    tree = etree.HTML(response.text)
    ip = tree.xpath('//h3/text()')[0][9:-1]
    print(ip)


# 定义一个得到代理IP的函数
def get_ip():
    # 读取IP列表内容
    with open('ip_addr.txt', 'r', encoding='utf_8') as f:
        ip_addr = f.readlines()

    # 由于得到的IP有'/n'将其去掉并存储到ip_list中
    ip_list = []
    for ip in ip_addr:
        ip = ip.split('\n')[0]
        ip_list.append(ip)
    return ip_list


# 使用ip，加上retry修饰器
@retry(stop_max_attempt_number=5, wait_fixed=5000)
def use_ip(ip):
    # 通过try，except来进行错误捕捉防止报错
    try:
        proxies = {'https': ip}
        get_my_ip(proxies)

    except Exception as e:
        print(e)


if __name__ == '__main__':
    # 使用get_ip()函数来得到ip列表
    ip_list = get_ip()
    # 通过for循环来使用函数
    for ip in ip_list:
        use_ip(ip)
